#ifndef CAR_LIST_H
#define CAR_LIST_H 1

#include <stdint.h>

#pragma pack(1)

#define MAX_UNIT_PARKING_CAR_NUM_LEN        9

typedef struct CAR_UNIT{
    uint32_t dead_time;
    uint8_t car_len;
    uint8_t car_num[MAX_UNIT_PARKING_CAR_NUM_LEN];
}CAR_Unit;

typedef struct CAR_NODE {
    CAR_Unit *data;
    struct CAR_NODE *next;
} car_node_t; 

typedef struct CAR_LIST {
    car_node_t *head; 
} car_list_t; 

#pragma pack() 

void car_list_init(car_list_t *); 

int car_list_len(car_list_t *); 

void car_list_append(car_list_t *, void *); 

int car_list_pop(car_list_t *, int); 

int car_list_pop_tail(car_list_t *); 

int car_list_get(car_list_t *, int, void **); 

int car_list_set(car_list_t *, int, void *); 

int car_list_index(car_list_t *, void *); 

void car_list_cycle(car_list_t *, void **, int *); 

void destroy_car_list(car_list_t *list);

CAR_Unit * create_new_car_unit(uint32_t dead_time, uint8_t car_len, uint8_t* car_num);
int car_list_compare(car_list_t *list, uint8_t *carnum, uint32_t current_time);

#endif 